home *** CD-ROM | disk | FTP | other *** search
- // the implementation of class HESSE
- // Copyright (C) 1997 Kazutaka Hirata <khirata@jove.acs.unt.edu>
-
- #include <math.h>
-
- #include "hesse.h"
-
- HESSE::HESSE(const SEGMENT& seg)
- {
- const XY_DBL& p1 = seg.p1();
- const XY_DBL& p2 = seg.p2();
- m_a = p2.y() - p1.y();
- m_b = p1.x() - p2.x();
- m_c = p2.y() * p1.x() - p1.y() * p2.x();
-
- if(m_c < 0) {
- m_a = - m_a;
- m_b = - m_b;
- m_c = - m_c;
- }
-
- double t = sqrt(m_a * m_a + m_b * m_b);
-
- if(t != 0) {
- m_a /= t;
- m_b /= t;
- m_c /= t;
- m_angle = (0 <= m_b) ? acos(m_a) : 0 - acos(m_a);
- } else {
- m_c = 0;
- m_angle = 0;
- }
-
- m_h.get_point_on_circle(XY_DBL(0, 0), m_c, m_angle);
-
- if(p1.x() == p2.x()) {
- m_on_segment = seg.is_y_on_segment(m_h.y());
- } else {
- m_on_segment = seg.is_x_on_segment(m_h.x());
- }
- }
-